﻿//
// Lightbox Gallery Module for DotNetNuke
// Project Contributors - Will Strohl (http://www.WillStrohl.com), Armand Datema (http://www.schwingsoft.com)
//
//Copyright (c) 2009-2013, Will Strohl
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are 
//permitted provided that the following conditions are met:
//
//Redistributions of source code must retain the above copyright notice, this list of 
//conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright notice, this list 
//of conditions and the following disclaimer in the documentation and/or other 
//materials provided with the distribution.
//
//Neither the name of Will Strohl, Armand Datema, Lightbox Gallery, nor the names of its contributors may be 
//used to endorse or promote products derived from this software without specific prior 
//written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
//DAMAGE.
//

//INSTANT C# NOTE: Formerly VB project-level imports:
using System;
using System.Text;
using System.Web.UI;
using DotNetNuke.Common;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.UI.Skins;
using DotNetNuke.UI.Skins.Controls;

namespace WillStrohl.Modules.Lightbox
{

    public partial class ChangeOrderView : WnsPortalModuleBase
    {

        #region  Private Members

        private string p_jQueryUIKey = "jQuery.ui";
        private string p_OrderHandler = string.Empty;

        #endregion

        #region  Public Properties

        protected string OrderHandler
        {
            get
            {
                if (!(string.IsNullOrEmpty(p_OrderHandler)))
                {
                    return p_OrderHandler;
                }

                //If Request.IsSecureConnection Then
                //    Me.p_OrderHandler = String.Concat("https://", Request.Url.Host, Me.ControlPath, "order.ashx")
                //Else
                //    Me.p_OrderHandler = String.Concat("http://", Request.Url.Host, Me.ControlPath, "order.ashx")
                //End If
                p_OrderHandler = string.Concat(ControlPath, "order.ashx");

                return p_OrderHandler;
            }
        }

        #endregion

        #region  Event Handlers

        /// <summary>
        /// OnInit - initialization of the module
        /// </summary>
        /// <param name="e"></param>
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }

        private void InitializeComponent()
        {
            Load += new System.EventHandler(Page_Load);
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            try
            {
                if (AllowedToEditModule() == false)
                {
                    Response.Redirect(GetDefaultViewUrl());
                }

                // if there aren't enough albums to re-order, send the visitor back to the main view
                CheckForAlbums();

                BindData();

                Page.Header.Controls.Add(new LiteralControl(string.Format(LightboxController.STYLESHEET_TAG_FORMAT, string.Concat(ControlPath, "js/fancybox/jquery.fancybox-1.3.4.css"))));

                Page.Header.Controls.Add(new LiteralControl(string.Format(LightboxController.STYLESHEET_TAG_FORMAT, string.Concat(ControlPath, "js/jquery-ui-1.8.2.css"))));

            }
            catch (Exception exc) // Module failed to load
            {
                Exceptions.ProcessModuleLoadException(this, exc, IsEditable);
            }
        }

        #endregion

        #region  Private Helper Functions

        private void BindData()
        {

            phOrder.Controls.Add(new LiteralControl(BuildAlbumList()));

            Skin.AddModuleMessage(this, GetLocalizedString("ChangeOrder.Text"), ModuleMessage.ModuleMessageType.BlueInfo);

        }

        private void SendToDefaultView()
        {
            Response.Redirect(GetDefaultViewUrl());
        }

        private void HandleException(Exception exc)
        {
            Exceptions.LogException(exc);
            if (UserInfo.IsSuperUser || UserInfo.UserID == PortalSettings.AdministratorId)
            {
                Skin.AddModuleMessage(this, string.Concat(exc.Message, "<br />", exc.StackTrace), ModuleMessage.ModuleMessageType.RedError);
            }
            else
            {
                Skin.AddModuleMessage(this, exc.Message, ModuleMessage.ModuleMessageType.RedError);
            }
        }

        private void CheckForAlbums()
        {

            var ctlModule = new LightboxController();
            int intCount = ctlModule.GetLightboxCount(ModuleId);

            if (!(intCount > 1))
            {

                SendToDefaultView();

            }

        }

        private string BuildAlbumList()
		{

			var ctlModule = new LightboxController();
			var collAlbum = new LightboxInfoCollection();
			collAlbum = ctlModule.GetLightboxes(ModuleId);

			if (collAlbum != null && collAlbum.Count > 0)
			{

				var sb = new StringBuilder(10);


				sb.Append("<ul id=\"ulOrder\" class=\"ui-sortable\">");

				foreach(LightboxInfo oAlbum in collAlbum)
				{

					sb.AppendFormat("<li id=\"{0}\" title=\"{1}\" class=\"wns-sortable ui-state-default\"><img src=\"{2}\" alt=\"{3}\" title=\"{3}\" />{1}</li>", oAlbum.LightboxId, oAlbum.GalleryName, string.Concat(TemplateSourceDirectory, "/images/arrow-move.png"), GetLocalizedString("Image.Resort.AltText"));

				}

				sb.Append("</ul>");
                
				return sb.ToString();

			}

			return string.Format("<p class=\"Normal\">{0}</p>", GetLocalizedString("NoAlbums.Text"));

		}

        #endregion

    }

}